import VXETable from 'vxe-table'
function format_number(n) {
  const b = parseInt(n).toString()
  const len = b.length
  if (len <= 3) {
    return b
  }
  const r = len % 3
  return r > 0 ? b.slice(0, r) + ',' + b.slice(r, len).match(/\d{3}/g).join(',') : b.slice(r, len).match(/\d{3}/g).join(',')
}
// 过滤价格
export function filterPrice(value) {
  if (value) {
    if (!isNaN(value) && typeof value === 'number') {
      return value.toFixed(2).toString().replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,')
    } else {
      return parseFloat(value).toFixed(2).toString().replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,')
    }
  } else if (value === null || value === undefined || value === '') {
    return ''
  } else if (value === 0) {
    return '0.00'
  }
}

// 过滤数字 并添加千分位
export function filterNumber(value) {
  if (value) {
    if (!isNaN(value) && typeof value === 'number') {
      return value.toString().replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,')
    } else {
      return parseFloat(value).toString().replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,')
    }
  } else if (value === null || value === undefined || value === '') {
    return ''
  } else if (value === 0) {
    return '0'
  }
}
// 过滤数字  去除千分位中的‘，’
export function removeNumber(value) {
  if (!value) return value
  value = value.toString()
  value = value.replace(/,/gi, '')
  return value
}

// 处理输入框中的价格
export function filterPriceInput(value) {
  value = (value === '' || value === undefined || value === null) ? '0' : value.toString()
  value = value.replace(/[^\d.]/g, '') // 清除"数字"和"."以外的字符
  value = value.replace(/^\./g, '') // 验证第一个字符是数字而不是.
  value = value.replace(/\.{2,}/g, '.') // 只保留第一个. 清除多余的
  value = value.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.') // 保证.只出现一次，而不能出现两次以上
  value = (+value).toFixed(2) // 只能输入两个小数
  const left = format_number(value.split('.')[0])
  const right = value.split('.')[1]
  value = left + '.' + right
  return value
  // 数值三位以，隔开
}

// 处理输入框中的数字
export function filterInputNumber(value) {
  value = (value === '' || value === undefined || value === null) ? '0' : value.toString()
  value = value.replace(/[^\d.]/g, '')
  value = value.replace(/^\./g, '')
  value = value.replace(/\.{2,}/g, '.')
  value = value.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.')
  return format_number(value)
}

// 表格-全局格式化内容（自定义全局的格式化处理函数）
export function vxeFormats() {
  VXETable.formats.mixin({
    // 格式化性别
    formatSex ({ cellValue }) {
      return cellValue ? (cellValue === '1' ? '男' : '女') : ''
    },
    // 格式化下拉选项
    formatSelect ({ cellValue }, list) {
      const item = list.find(item => item.value === cellValue)
      return item ? item.label : ''
    },
    // 格式化日期，默认 yyyy-MM-dd HH:mm:ss
    formatDate ({ cellValue }, format) {
      return XEUtils.toDateString(cellValue, format || 'yyyy-MM-dd HH:mm:ss')
    },
    // 四舍五入金额，每隔3位逗号分隔，默认2位数
    formatAmount ({ cellValue }, digits = 2) {
      return XEUtils.commafy(XEUtils.toNumber(cellValue), { digits })
    },
    // 格式化银行卡，默认每4位空格隔开
    formatBankcard ({ cellValue }) {
      return XEUtils.commafy(XEUtils.toValueString(cellValue), { spaceNumber: 4, separator: ' ' })
    },
    // 四舍五入,默认两位数
    formatFixedNumber ({ cellValue }, digits = 2) {
      return XEUtils.toFixed(XEUtils.round(cellValue, digits), digits)
    },
    // 向下舍入,默认两位数
    formatCutNumber ({ cellValue }, digits = 2) {
      return XEUtils.toFixed(XEUtils.floor(cellValue, digits), digits)
    }
  })
}
